package git.yyge.luajava.utils;

import party.iroiro.luajava.Lua;
import party.iroiro.luajava.LuaException;
import party.iroiro.luajava.lua53.Lua53;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

public class LuaUtils {


    public static Object runLuaFile(String path) {

        // 使用try-with-resources自动管理Lua资源
        try (Lua L = new Lua53()) {
            // 1. 加载标准库
            L.openLibraries();
//lua.openJava();         // ✅ 重要：加载 Java 接口库
            // 2. 设置全局变量（可选）
            //L.set("java", L.getGlobal("java")); // 确保java模块可用
//            String luaScript = new String(Files.readAllBytes(
//                    Paths.get(path)
//            ));

            InputStream is = LuaUtils.class.getClassLoader()
                    .getResourceAsStream(path);
            ByteArrayOutputStream result = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int length;
            while ((length = is.read(buffer)) != -1) {
                result.write(buffer, 0, length);
            }
            String luaCode = result.toString(StandardCharsets.UTF_8.name());



            L.run(luaCode);
            // 3. 执行Lua文件
//            L.loadExternal("demo.lua");

            // 4. 获取Lua返回的对象（如果有）
//            Object returnedObj = L.toObject(-1);
//            if (returnedObj instanceof Printer) {
//                Printer p = (Printer) returnedObj;
//                System.out.println("\nJava端接收到Lua返回的Printer对象:");
//                p.printMessage("这是在Java中调用的消息");
//            }

        } catch (LuaException e) {
            System.err.println("Lua执行出错:");
            e.printStackTrace();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        return "执行成功!";
    }
}
